package com.anttribe.components.infra.lang;

import org.apache.commons.lang3.ArrayUtils;

/**
 * 异或（xor）工具类（加解密）
 * 原理：一个整数 a 和任意一个整数 b 异或两次，得到的结果是整数 a 本身，即: a == a ^ b ^ b
 *
 * @author zhaoyong
 * @date 2021/5/8 0008
 */
public final class XORUtils {

    /**
     * 加密/解密
     *
     * @param datas 数据
     * @param keys  密钥
     * @return 结果
     */
    public static byte[] encrypt(byte[] datas, byte[] keys) {
        if (ArrayUtils.isEmpty(datas) || ArrayUtils.isEmpty(keys)) {
            return datas;
        }

        int len = datas.length;
        byte[] r = new byte[len];
        for (int i = 0; i < len; i++) {
            r[i] = (byte) (datas[i] ^ keys[i % keys.length] ^ (i & 0xFF));
        }
        return r;
    }

}
